#include "logger.h"

void initLogger() {
    //apre il file di log del server solo se non è gia aperto
	if(serverLogFdesc == 0){ 
		serverLogFdesc = open(SERVERLOGFILE, O_WRONLY|O_CREAT, LOG_FILE_MODE);
		if (serverLogFdesc == -1) {
			printf("errore creazione file log server\n");
			exit(1);
		}
		chmod(SERVERLOGFILE, LOG_FILE_MODE);}
    //apre il file di log del client solo se non è gia aperto
    if(clientLogFdesc == 0) {
        clientLogFdesc = open(CLIENTLOGFILE, O_WRONLY|O_CREAT, LOG_FILE_MODE);
        if (clientLogFdesc == -1) {
            printf("errore creazione file log client\n");
            exit(1);
        }
    chmod(CLIENTLOGFILE, LOG_FILE_MODE);}
}

void closeLogger() {
    //chiude i file descriptor  dei file di log
	int a;
	a = close(serverLogFdesc);
	serverLogFdesc = a;
	a = close(clientLogFdesc);
	clientLogFdesc = a;
}

void serverLog(char* msg) {
    //prelevo e formatto l'ora corrente
	time_t rawtime;
	struct tm * timeinfo;
	char timebuf [128];
	char buf[MAX_BUF_LOG];
	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	strftime (timebuf,128,"[%x %X]",timeinfo);
	memset(buf, 0, MAX_BUF_LOG);
	strcat(buf, timebuf);
    //aggiungo il messaggio
	strcat(buf, "  ");
	strcat(buf, msg);
	strcat(buf, "\n");
	//la riga sotto è commentata per non fare scrivere in standard output il log del server
    //printf("%s", buf);
    //Sposta la posizione attuale alla fine del file, in modo da scrivere in append
	lseek(serverLogFdesc, 0, SEEK_END);
	write(serverLogFdesc, &buf, strlen(buf));
}


void clientLog(char* msg) {
    //prelevo e formatto l'ora corrente
	time_t rawtime;
	struct tm * timeinfo;
	char timebuf [128];
	char buf[MAX_BUF_LOG];
	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	strftime (timebuf,128,"[%x %X]",timeinfo);
	memset(buf, 0, MAX_BUF_LOG);
	strcat(buf, timebuf);
    //aggiungo il messaggio
	strcat(buf, "  ");
	strcat(buf, msg);
	strcat(buf, "\n");
	printf("%s", buf);
    //Sposta la posizione attuale alla fine del file, in modo da scrivere in append
	lseek(clientLogFdesc, 0, SEEK_END);
	write(clientLogFdesc, &buf, strlen(buf));
}
